Cel	JPEG Optimizer 3.06
Opis	Programik jak sama nazwa wskazuje suy do zmiejszania
	rozmiarw plikw jpg przy zachowaniu przyzwoitej jakoci
Gdzie	Na dysku mojego kumpla ;)
URL	http://www.xat.com/
Tools	jak zwykle kochany SoftIce 3.XX


Program umoliwia zarejestrowanie, wic czemu nie sprbowa :)
1.W menu HELP klikamy na REGISTER, program prosi tylko o s/n, bez
danych personalnych, wpisujemy dowolny ulubiony kod jak np.987654321
2.Wchodzimy do SoftIca i zakadamy puapk na hmemcpy(dlaczego wanie
na hmemcpy?Poniewa na GetWindowTextA i GetDlgItemTextA nie dziaa)
3.Wychodzimy z SI i klikamy na OK
4.Ldujemy w SI, potem standard w przypadku programw napisanych
w delphi tzn.gdy mamy jedno okienko dialogowe to jeden raz F11,
12 razy F12
aby uatwi sobie ycie, gdy np. czsto bawimy si programami w delphy
powysze postpowanie(te F11 i F12) mona zapisa w pliku winice.dat
pod klawisz np. CTRL+F7

CF7="^G @SS:ESP;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;^p ret;"

gdy ju jestemy przy pliku konfiguracyjnym SI czsto przydaje sie
ponisza kombinacja, gdy polecenie exit SoftIca czasami powoduje
winicie systemu

CF5="a;push -1;call ExitProcess;;x;"

powoduje to wpisanie pod eip kodu asm

push	-1		; kod wyjcia
call	ExitProcess	; zakocz proces

ale nie prbujcie tego gdy jestecie w Ring0...

to tak na marginesie, a teraz do rzeczy
wic gdy ju jestemy po F11 i 12 F12 widzimy kod:

.00429350: 8B83C8010000    mov       eax,[ebx][0000001C8]
.00429356: E875900100      call     .0004423D0
.0042935B: 8D45F4          lea       eax,[ebp][-000C]
.0042935E: E8BFFF0100      call     .000449322
.00429363: 83F806          cmp       eax,006	; czy s/n ma dugo 6 znakw?
.00429366: 751B            jne      .000429383  ; jeeli nie to poka info o bdnym kodzie
.00429368: 837DF800        cmp       d,[ebp][-0008],000 ;" "
.0042936C: 7405            je       .000429373
.0042936E: 8B55F8          mov       edx,[ebp][-0008] ; adres w pamici naszego kodu
.00429371: EB05            jmps     .000429378
.00429373: BAFBE34700      mov       edx,00047E3FB ;" G"
.00429378: 52              push      edx	; zapamitaj adres naszego kodu	
.00429379: E88A0B0000      call     .000429F08	; funkcja sprawdzajca kod, tu warto zajrze
.0042937E: 59              pop       ecx
.0042937F: 84C0            test      al,al	; wynik zwracany po sprawdzeniu kodu w al
.00429381: 7504            jne      .000429387	; skok gdy al<>0
.00429383: 33C0            xor       eax,eax	; czyci eax, zamiast xor eax,eax powinno by sub eax,eax to samo ale szybsze
.00429385: EB05            jmps     .00042938C  ; skok do bad boy

warto zajrze do procedury pod 00429379 co czynimy(F8):

.00429F08: 55              push      ebp
.00429F09: 8BEC            mov       ebp,esp
.00429F0B: 83C4F8          add       esp,-008 ;""
.00429F0E: 53              push      ebx
.00429F0F: 8B4508          mov       eax,[ebp][00008] ; do eax adowany jest adres naszego wprowadzonego kodu
.00429F12: 8D5DF8          lea       ebx,[ebp][-0008] ; adres bufora gdzie bd kopiowane kolejne kody hex znakw naszego s/n
.00429F15: 8A10            mov       dl,[eax]         ; dl=pierwszy znak naszego s/n
.00429F17: 8813            mov       [ebx],dl         ; skopiuj dl pod adres zawarty w ebx
.00429F19: 8A4801          mov       cl,[eax][00001]  ; postpuj tak samo z kolejnymie 5 znakami z naszego s/n
.00429F1C: 884B01          mov       [ebx][00001],cl
.00429F1F: 8A5002          mov       dl,[eax][00002]
.00429F22: 885302          mov       [ebx][00002],dl
.00429F25: 8A4803          mov       cl,[eax][00003]
.00429F28: 884B03          mov       [ebx][00003],cl
.00429F2B: 8A5004          mov       dl,[eax][00004]
.00429F2E: 885304          mov       [ebx][00004],dl
.00429F31: 8A4005          mov       al,[eax][00005]
.00429F34: 884305          mov       [ebx][00005],al ; ostatni znak do dword ptr[ebx+5]
.00429F37: 0FBE0B          movsx     ecx,b,[ebx]     ; skopiuj do cl bajt spod ebx(pierwszy znak z naszego kodu)
.00429F3A: 51              push      ecx
.00429F3B: E86C590400      call     .00046F8AC       ; po tej funkcji w eax kod hex w upper case pierwszego znaku z naszego seriala
.00429F40: 59              pop       ecx
.00429F41: 83F852          cmp       eax,052 ;"R"    ; porwnywany do "R", w SI piszemy ?52
.00429F44: 7547            jne      .000429F8D       ; skok do bad boy
.00429F46: 0FBE4301        movsx     eax,b,[ebx][00001] ; al kolejny znak naszego seriala
.00429F4A: 50              push      eax
.00429F4B: E85C590400      call     .00046F8AC
.00429F50: 59              pop       ecx
.00429F51: 83F857          cmp       eax,057 ;"W"    ; porwnywany z "W"
.00429F54: 7537            jne      .000429F8D       ; to samo co powyej
.00429F56: 0FBE5302        movsx     edx,b,[ebx][00002]
.00429F5A: 83FA33          cmp       edx,033 ;"3"    ; porwnanie z "3"
.00429F5D: 752E            jne      .000429F8D   -------- (4)
.00429F5F: 0FBE4B03        movsx     ecx,b,[ebx][00003]
.00429F63: 83F934          cmp       ecx,034 ;"4"    ; z "4"
.00429F66: 7525            jne      .000429F8D
.00429F68: 0FBE4304        movsx     eax,b,[ebx][00004]
.00429F6C: 83F831          cmp       eax,031 ;"1"    ; z "1"
.00429F6F: 751C            jne      .000429F8D
.00429F71: 0FBE5305        movsx     edx,b,[ebx][00005]
.00429F75: 83FA38          cmp       edx,038 ;"8"    ; i ostatni znak(6) porwnywany z "8"
.00429F78: 7513            jne      .000429F8D
.00429F7A: C705E44A48001443FC69         mov       d,[000484AE4],069FC4314 ;"iC
.00429F84: E893AAFDFF      call     .000404A1C   -------- (8)
.00429F89: B001            mov       al,001 ;""     ; w al zwracana jedynka dla sprawdzenia test al,al pod adresem 0042937F
dalej jest wyjcie z procedury i inne mieci

Z powyszego kodu wynika, e poprawny serial wyglda nastpujco
RW3418

Program JPEG Optimizer jest wietnym przykadem jak niewydajne moe by pisanie programw
w jzykach wysokiego poziomu(C,Pascal), cae te sprawdzenie mona by zmieci w paru
linijkach kodu w asm np.

mov	esi,offset 1string
mov	edi,offset 2string
mov	ecx,liczba znakow z esi
repe	cmpsb
jz	ciagi_w_edi_i_esi_takie_same

jest to tylko moje skromne zdanie, wic nie przejmujcie si tym zbytnio ale jeeli macie
okazj nauczy sie programowania w asemblerze radz sprbowa, naprawd warto, gdy
ju nauczycie si cho troszk programowa w asm uwiadomicie sobie, e niektre problemy
z ktrymi spotkalicie si przy programowaniu w jezykach takich jak np.C++,Pascal(Delphi)
da si rozwica atwiej, szybciej i wydajniej
Par adresw dla zainteresowanych

http://win32asm.home.ml.org/
http://www.eskimo.com/~htak/win95asm/win95asm.htm
http://www.geocities.com/SiliconValley/Heights/7394/
http://win32asm.cjb.net

Do nastpnego razu

bartw@free.net.pl

EOF